package com.algorithm.ch1.hf.array;

/**
 * 给定一个 n × n 的二维矩阵表示一个图像。

 将图像顺时针旋转 90 度。

 说明：

 你必须在原地旋转图像，这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

 示例 1:

 给定 matrix =
 [
 [1,2,3],  0 0 -  0 2 , 0 1 - 1 2, 0 2 - 2 2
 [4,5,6],  1 0 - 0 1, 1 1 - 1 1, 1 2 - 2 1
 [7,8,9]  2 0 - 0 0 ,2 1 - 1 0, 2 2 - 2 0
 ],

 原地旋转输入矩阵，使其变为:
 [
 [7,4,1],
 [8,5,2],
 [9,6,3]
 ]
 示例 2:

 给定 matrix =
 [                  5
 [ 5, 1, 9,11],  1 1 - 1 4 , 1 2 - 2 4 , 1 3 - 3 4 ,1 4 - 4 4
 [ 2, 4, 8,10],  2 1 -1 3 , 2 2 - 2 3, 2 3 - 3 3, 2 4 - 4 3
 [13, 3, 6, 7],  3 1 - 1 2, 3 2 - 2 2 , 3 3 - 3 2, 3 4 - 4 2
 [15,14,12,16]   4 1 - 1 1, 4 2 - 2 - 1, 4 3 - 3 1, 4 4 - 4 1
 ],

 原地旋转输入矩阵，使其变为:
 [
 [15,13, 2, 5],  0 0 1 0
 [14, 3, 4, 1],  1 0 1 1
 [12, 6, 8, 9],
 [16, 7,10,11]
 ]
 */
public class rotate90 {

    public static void main(String[] args) {

        int[][] matrix = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
        rotate(matrix);
        System.out.println(matrix);
    }

    public static void rotate(int[][] matrix){
        //正方形矩阵  循环1/4 个区域做替换
        double index = new Double(matrix.length - 1) / 2.0;
        for(int a = 0;a < matrix.length;a++) {
            if(a >= index ) {
                break;
            }
            for(int b = 0; b < matrix.length;b++) {

                if(a > index || b > index) {
                    break;
                }
                int c = matrix.length - a - 1 ;

                int d = matrix.length - b - 1;

                int e = matrix.length - c - 1;

//                int f = matrix.length - d - 1;

                int temp = matrix[d][e];
                matrix[d][e] = matrix[c][d];
                matrix[c][d] = matrix[b][c];
                matrix[b][c] = matrix[a][b];
                matrix[a][b] = temp;

            }
        }

    }
}
